package com.lj.back.manage.scaffold.common.util;

import com.lj.back.manage.scaffold.common.enums.ResponseEnum;
import lombok.EqualsAndHashCode;
import lombok.ToString;

/**
 * 统一返回结果类
 * @author lv
 * @version 1.0.0
 */
@ToString
@EqualsAndHashCode
public class R {

    /**
     * 状态码
     */
    private Integer code;

    /**
     * 状态描述
     */
    private String msg;

    /**
     * 返回内容
     */
    private Object data;

    /**
     * 是否成功标识  true-成功 false-失败
     */
    private boolean success;

    /**
     * 成功
     * @param message 状态描述
     * @return
     */
    public static R success(String message){
        return success().message(message);
    }

    /**
     * 设置返回结果
     * @param responseEnum 响应枚举类
     * @return
     */
    public static R setR(ResponseEnum responseEnum){
        R r = new R();
        r.code = responseEnum.getCode();
        r.msg = responseEnum.getMessage();
        r.success = responseEnum.isSuccess();
        return r;
    }

    /**
     * 成功
     * @return
     */
    public static R success(){
        return setR(ResponseEnum.SUCCESS);
    }


    /**
     * 成功
     * @param data 内容
     * @return
     */
    public static R success(Object data){
        return success().put(data);
    }

    /**
     * 错误
     * @param message 描述信息
     * @return
     */
    public static R error(String message){
        return error().message(message);
    }

    public static R error(){
        return setR(ResponseEnum.ERROR);
    }

    /**
     * 错误
     * @param data 描述信息
     * @return
     */
    public static R error(Object data){
        return error().put(data);
    }

    /**
     * 给当前对象设置 返回内容
     * @param data 内容
     * @return 当前对象
     */
    public R put(Object data){
        this.data = data;
        return this;
    }

    /**
     * 给当前对象设置 状态码
     * @param code 状态码
     * @return 当前对象
     */
    public R code(int code){
        this.code = code;
        return this;
    }

    /**
     * 给当前对象设置 描述信息
     * @param message 描述信息
     * @return 当前对象
     */
    public R message(String message){
        this.msg = message;
        return this;
    }

    /**
     * 给当前对象设置 是否成功标识
     * @param isSuccess 是否成功标识
     * @return 当前对象
     */
    public R isSuccess(boolean isSuccess){
        this.success = isSuccess;
        return this;
    }
}
